import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.text.NumberFormat;
import java.util.Locale;

import javax.swing.ButtonGroup;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import java.applet.Applet;

public class JanelaPrincipal extends JApplet implements ActionListener {


	GridBagConstraints cons = new GridBagConstraints();   
	GridBagLayout layout = new GridBagLayout();
	
	JPanel cadP1 = new JPanel(layout);
	JPanel cadP2 = new JPanel(layout);
	JPanel corrida = new JPanel(layout);
	CardLayout cardL = new CardLayout();
	JPanel painelCard = new JPanel(cardL);
	JFrame c = new JFrame();


	JMenuBar barra = new JMenuBar();
	JMenu cadastros = new JMenu("Cadastros");
	JMenu correr = new JMenu("Correr");
	JMenuItem iniCor = new JMenuItem("Iniciar a Corrida");
	JMenuItem cad1 = new JMenuItem("Cadastro 1 player");
	JMenuItem cad2 = new JMenuItem("Cadastro 2 player");
	JTextField nome = new JTextField(10);
	JRadioButton est = new JRadioButton("Estrela");
	JRadioButton prof = new JRadioButton("Profissional");
	JRadioButton SProf = new JRadioButton("Semi - Profissional");
	JRadioButton ama = new JRadioButton("Amador");
	JCheckBox eng = new JCheckBox("Engenheito");
	JCheckBox mec = new JCheckBox("Mecânico");
	JCheckBox dri = new JCheckBox("Só dirige");
	JCheckBox estra = new JCheckBox("Estrategista");
	JComboBox idade = new JComboBox();
	JComboBox equipe = new JComboBox();
	JTextField vel1 = new JTextField(10);
	JTextField vel2 = new JTextField(10);
	JButton limpar = new JButton("Limpar");
	JButton salvar = new JButton("Salvar");

	JTextField nome2 = new JTextField(10);
	JRadioButton est2 = new JRadioButton("Estrela");
	JRadioButton prof2 = new JRadioButton("Profissional");
	JRadioButton SProf2 = new JRadioButton("Semi - Profissional");
	JRadioButton ama2 = new JRadioButton("Amador");
	JCheckBox eng2 = new JCheckBox("Engenheito");
	JCheckBox mec2 = new JCheckBox("Mecânico");
	JCheckBox dri2 = new JCheckBox("Só dirige");
	JCheckBox estra2 = new JCheckBox("Estrategista");
	JComboBox idade2 = new JComboBox();
	JComboBox equipe2 = new JComboBox();
	JTextField vel12 = new JTextField(10);
	JTextField vel22 = new JTextField(10);
	JButton limpar2 = new JButton("Limpar");
	JButton salvar2 = new JButton("Salvar");
	JButton salvar3 = new JButton("Salvar");
	JButton etapa = new JButton("Proxima etapa");
	JButton finalizar = new JButton("Finalizar Corrida");
	
	JButton acelerar1 = new JButton("Acelerar");
	JButton acelerar2 = new JButton("Acelerar");
	JButton frear1 = new JButton("Frear");
	JButton frear2 = new JButton("Frear");
	JTextField velP1 = new JTextField(10);
	JTextField velP2 = new JTextField(10);
	JTextField pista = new JTextField(20);
	
	
	
	
	Piloto p1 = new Piloto();
	Piloto p2 = new Piloto();
	Carro c1 = new Carro(1, p1);
	Carro c2 = new Carro(2, p2);
	
	int estPista;
	
	

	public JanelaPrincipal() {
		//c.setContentPane(c.getContentPane());  
		Container c = this.getContentPane();
		c.setLayout(new BorderLayout());
		
		cons.insets = new Insets(10,10,10,10);
		cons.anchor = GridBagConstraints.FIRST_LINE_START;

		//setTitle("Corrida FRUMMMMM");
		//setSize(700,  400);
		//setDefaultCloseOperation(EXIT_ON_CLOSE);

		c.add(barra);
		barra.add(cadastros);
		barra.add(correr);
		correr.add(iniCor);
		iniCor.addActionListener(this);
		cadastros.add(cad1);
		cadastros.add(cad2);
		cad1.addActionListener(this);
		cad2.addActionListener(this);

		
		painelCard.add(cadP1, "cadP1");
		painelCard.add(cadP2, "cadP2");
		painelCard.add(corrida, "corrida");

		c.add(painelCard, BorderLayout.CENTER);

		cons.gridx = 1;
		cons.gridy = 0;

		cadP1.add(new JLabel("Player 1"), cons);

		//Nome
		cons.gridx = 1;
		cons.gridy = 2;

		cadP1.add(new JLabel("Nome: "), cons);
		cons.gridx = 2;
		cons.gridy = 2;
		cadP1.add(nome, cons);

		cons.gridx = 1;
		cons.gridy = 4;
		//experiencia
		cadP1.add(new JLabel("Experiencia "), cons);
		ButtonGroup exp = new ButtonGroup();


		exp.add(est);
		exp.add(prof);
		exp.add(SProf);
		exp.add(ama);


		cons.gridx = 1;
		cons.gridy = 5;
		cadP1.add(est, cons);
		cons.gridx = 1;
		cons.gridy = 6;
		cadP1.add(prof, cons);
		cons.gridx = 1;
		cons.gridy = 7;
		cadP1.add(SProf, cons);
		cons.gridx = 1;
		cons.gridy = 8;
		cadP1.add(ama, cons);


		cons.gridx = 2;
		cons.gridy = 4;
		//Habilidade
		cadP1.add(new JLabel("Habilidade "), cons);



		cons.gridx = 2;
		cons.gridy = 5;
		cadP1.add(estra, cons);
		cons.gridx = 2;
		cons.gridy = 6;
		cadP1.add(eng, cons);
		cons.gridx = 2;
		cons.gridy = 7;
		cadP1.add(mec, cons);
		cons.gridx = 2;
		cons.gridy = 8;
		cadP1.add(dri, cons);


		Integer a[] = new Integer[25];

		for (int i = 0; i < 25; i++){
			a[i] = 15 + i;

		}

		//Idade
		cons.gridx = 4;
		cons.gridy = 2;
		cadP1.add(new JLabel("Idade: "), cons);

		idade.setModel(new DefaultComboBoxModel(a));
		cons.gridx = 5;
		cons.gridy = 2;
		cadP1.add(idade, cons);

		//Equipe
		cons.gridx = 4;
		cons.gridy = 4;
		cadP1.add(new JLabel("Equipe: "), cons);

		equipe.setModel(new DefaultComboBoxModel(new String[]{"Equipe A", "Equipe B" }));
		equipe.setEditable(true);
		cons.gridx = 5;
		cons.gridy = 4;
		cadP1.add(equipe, cons);

		//botao salvar
		cons.gridx = 5;
		cons.gridy = 8;
		cadP1.add(salvar, cons);
		salvar.addActionListener(this);

		//botao limpar
		cons.gridx = 6;
		cons.gridy = 8;		
		cadP1.add(limpar, cons);
		limpar.addActionListener(this);
		
		//Nome

		cons.gridx = 1;
		cons.gridy = 0;
		cadP2.add(new JLabel("Player 2"), cons);

		cons.gridx = 1;
		cons.gridy = 2;

		cadP2.add(new JLabel("Nome: "), cons);
		cons.gridx = 2;
		cons.gridy = 2;
		cadP2.add(nome2, cons);

		cons.gridx = 1;
		cons.gridy = 4;
		//experiencia
		cadP2.add(new JLabel("Experiencia "), cons);
		ButtonGroup exp2= new ButtonGroup();


		exp2.add(est2);
		exp2.add(prof2);
		exp2.add(SProf2);
		exp2.add(ama2);


		cons.gridx = 1;
		cons.gridy = 5;
		cadP2.add(est2, cons);
		cons.gridx = 1;
		cons.gridy = 6;
		cadP2.add(prof2, cons);
		cons.gridx = 1;
		cons.gridy = 7;
		cadP2.add(SProf2, cons);
		cons.gridx = 1;
		cons.gridy = 8;
		cadP2.add(ama2, cons);


		cons.gridx = 2;
		cons.gridy = 4;
		//Habilidade
		cadP2.add(new JLabel("Habilidade "), cons);



		cons.gridx = 2;
		cons.gridy = 5;
		cadP2.add(estra2, cons);
		cons.gridx = 2;
		cons.gridy = 6;
		cadP2.add(eng2, cons);
		cons.gridx = 2;
		cons.gridy = 7;
		cadP2.add(mec2, cons);
		cons.gridx = 2;
		cons.gridy = 8;
		cadP2.add(dri2, cons);


		Integer b[] = new Integer[25];

		for (int i = 0; i < 25; i++){
			b[i] = 15 + i;

		}

		//Idade
		cons.gridx = 4;
		cons.gridy = 2;
		cadP2.add(new JLabel("Idade: "), cons);

		idade2.setModel(new DefaultComboBoxModel(a));
		cons.gridx = 5;
		cons.gridy = 2;
		cadP2.add(idade2, cons);

		//Equipe
		cons.gridx = 4;
		cons.gridy = 4;
		cadP2.add(new JLabel("Equipe: "), cons);

		equipe2.setModel(new DefaultComboBoxModel(new String[]{"Equipe A", "Equipe B" }));
		equipe2.setEditable(true);
		cons.gridx = 5;
		cons.gridy = 4;
		cadP2.add(equipe2, cons);


		cons.gridx = 5;
		cons.gridy = 8;
		cadP2.add(salvar2, cons);
		salvar2.addActionListener(this);

		cons.gridx = 6;
		cons.gridy = 8;		
		cadP2.add(limpar2, cons);
		limpar2.addActionListener(this);
		
		
		
		//painel corrida
		cons.insets = new Insets(20,20,20,20);
		
		cons.gridx = 0;
		cons.gridy = 0;	
		corrida.add(new JLabel("Status da pista"), cons);
		
		cons.gridx = 0;
		cons.gridy = 1;	
		corrida.add(pista);
		
		cons.gridx = 0;
		cons.gridy = 2;	
		corrida.add(new JLabel("Jogador 1"), cons);
		
		cons.gridx = 5;
		cons.gridy = 2;	
		corrida.add(new JLabel("Jogador 2"), cons);
		
		cons.gridx = 0;
		cons.gridy = 5;	
		corrida.add(acelerar1, cons);
		acelerar1.addActionListener(this);
		
		cons.gridx = 5;
		cons.gridy = 5;	
		corrida.add(acelerar2, cons);
		acelerar2.addActionListener(this);
		
		cons.gridx = 1;
		cons.gridy = 5;	
		corrida.add(frear1, cons);
		frear1.addActionListener(this);
		
		cons.gridx = 8;
		cons.gridy = 5;	
		corrida.add(frear2, cons);
		frear2.addActionListener(this);
		
		cons.gridx = 0;
		cons.gridy = 7;	
		corrida.add(new JLabel("Velocidade P1"), cons);
		
		cons.gridx = 1;
		cons.gridy = 7;	
		corrida.add(velP1, cons);
		
		cons.gridx = 5;
		cons.gridy = 7;	
		corrida.add(new JLabel("Velocidade p2"), cons);
		
		cons.gridx = 8;
		cons.gridy = 7;	
		corrida.add(velP2, cons);
		
		cons.gridx = 8;
		cons.gridy = 8;
		corrida.add(etapa, cons);
		etapa.addActionListener(this);
		
		cons.gridx = 0;
		cons.gridy = 8;
		corrida.add(finalizar, cons);
		finalizar.addActionListener(this); 
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		CardLayout cl = (CardLayout) painelCard.getLayout();
		String mensagem;
		c1.pilotoAtualiza(p1);
		c2.pilotoAtualiza(p2);
		
		if(e.getSource() == finalizar){
			String msg = new String();
			if(c1.getVelAtual() == c1.getVelAtual()){
				msg = p1.getNome() + " Empatou com" + p2.getNome();
			}
			
			if(c1.getVelAtual() > c2.getVelAtual()){
				msg = p1.getNome() + " É campeao";
				
			}
			
			else{
				msg = p2.getNome() + " É campeao";
			}
			
			JOptionPane.showMessageDialog(null, msg);
		}
		if(e.getSource() == limpar){
			nome.setText(null);
			eng.setSelected(false);
			mec.setSelected(false);
			dri.setSelected(false);
			estra.setSelected(false);
			idade.setSelectedItem(null);
			equipe.setSelectedItem(null);
		}
		
		if(e.getSource() == limpar2){
			nome2.setText(null);
			eng2.setSelected(false);
			mec2.setSelected(false);
			dri2.setSelected(false);
			estra2.setSelected(false);
			idade2.setSelectedItem(null);
			equipe2.setSelectedItem(null);
		}
		
		if(e.getSource() ==  etapa){
			estPista = (int) (Math.random() * 100);
			if(estPista % 2 == 0){
				pista.setText("Curva adiante");
			}
			if(estPista % 2 != 0){
				pista.setText("Reta adiante");
			}
			acelerar1.setEnabled(true);
			frear1.setEnabled(true);
			acelerar2.setEnabled(true);
			frear2.setEnabled(true);
		}
		
		if(e.getSource() == iniCor){
			cl.show(painelCard, "corrida");
			c1.ligar();
			c2.ligar();
			estPista = (int) (Math.random() * 100);
			if(estPista % 2 == 0){
				pista.setText("Curva adiante");
			}
			if(estPista % 2 != 0){
				pista.setText("Reta adiante");
			}
			velP1.setText(String.valueOf(c1.getVelAtual()));
			velP2.setText(String.valueOf(c2.getVelAtual()));
		}
		
		if(e.getSource() == cad1){
			cl.show(painelCard, "cadP1");

		}
		if(e.getSource() == cad2){
			cl.show(painelCard, "cadP2");

		}
		
		
		if(e.getSource() == acelerar1 ){
			c1.acelerar(estPista);
			acelerar1.setEnabled(false);
			frear1.setEnabled(false);
			velP1.setText(String.valueOf(c1.getVelAtual()));
			
		}
		
		if(e.getSource() == acelerar2 ){
			c2.acelerar(estPista);
			acelerar2.setEnabled(false);
			frear2.setEnabled(false);
			velP2.setText(String.valueOf(c2.getVelAtual()));
			
		}
		if(e.getSource() == frear1 ){
			c1.frear(estPista);
			acelerar1.setEnabled(false);
			frear1.setEnabled(false);
			velP1.setText(String.valueOf(c1.getVelAtual()));
			
		}
		
		if(e.getSource() == frear2 ){
			c2.frear(estPista);
			acelerar2.setEnabled(false);
			frear2.setEnabled(false);
			velP2.setText(String.valueOf(c2.getVelAtual()));
			
		}
		
		
		
		
		
		if (e.getSource() == salvar){

			p1.setNome(nome.getText());

			p1.setEquipe((String)equipe.getSelectedItem());
			p1.setIdade(Double.parseDouble(idade.getSelectedItem().toString()));

			if(estra.isSelected()){
				p1.setHab(p1.getHab() + 3);
			}
			if(eng.isSelected()){
				p1.setHab(p1.getHab() + 3);
			}
			if(mec.isSelected()){
				p1.setHab(p1.getHab() + 2);
			}
			if(dri.isSelected()){
				p1.setHab(p1.getHab() + 2);
			}

			if(est.isSelected()){
				p1.setExp(10);
			}

			if(prof.isSelected()){
				p1.setExp(7);
			}

			if(SProf.isSelected()){
				p1.setExp(5);
			}

			if(ama.isSelected()){
				p1.setExp(3);
			}
			
			if(p1.getHab() > 8 && p1.idade > 30){
				p1.setHab(7);
				mensagem = "A Hab do piloto nao condiz com a realidade \n sua Hab foi reduzida para 7" ;
				JOptionPane.showMessageDialog(null, mensagem);
				
			}
			
			if(p1.getExp() > 8 && p1.idade < 30){
				p1.setExp(7);
				mensagem = "A Exp do piloto nao condiz com a realidade \n sua Exp foi reduzida para 7" ;
				JOptionPane.showMessageDialog(null, mensagem);
				
			}

			mensagem = p1.getNome() + "\n" + p1.getEquipe() + "\n" + p1.getIdade()+  "\n" + p1.getHab() +  "\n" + p1.getExp();
			JOptionPane.showMessageDialog(null, mensagem);

		}
		if (e.getSource() == salvar2){
			
			String msg = new String();
			
			p2.setNome(nome2.getText());

			p2.setEquipe((String)equipe2.getSelectedItem());
			p2.setIdade(Double.parseDouble(idade2.getSelectedItem().toString()));

			if(estra2.isSelected()){
				p2.setHab(p2.getHab() + 3);
			}
			if(eng2.isSelected()){
				p2.setHab(p2.getHab() + 3);
			}
			if(mec2.isSelected()){
				p2.setHab(p2.getHab() + 2);
			}
			if(dri2.isSelected()){
				p2.setHab(p2.getHab() + 2);
			}

			if(est2.isSelected()){
				p2.setExp(10);
			}

			
			if(prof2.isSelected()){
				p2.setExp(7);
			}

			if(SProf2.isSelected()){
				p2.setExp(5);
			}

			if(ama2.isSelected()){
				p2.setExp(3);
			}
			
			if(p2.getHab() > 8 && p2.idade > 30){
				p2.setHab(7);
				msg = "A Hab do piloto nao condiz com a realidade \n sua Hab foi reduzida para 7" ;
				JOptionPane.showMessageDialog(null, msg);
				
			}
			
			if(p2.getExp() > 8 && p2.idade < 30){
				p2.setExp(7);
				msg = "A Exp do piloto nao condiz com a realidade \n sua Exp foi reduzida para 7" ;
				JOptionPane.showMessageDialog(null, msg);
				
			}
			
			msg = p2.getNome() + "\n" + p2.getEquipe() + "\n" + p2.getIdade()+  "\n" + p2.getHab() +  "\n" + p2.getExp();
			JOptionPane.showMessageDialog(null, msg);
			
		}

	}

}
